#ifndef __DICTPRODUCER_HH__
#define __DICTPRODUCER_HH__
#include <vector>
#include <map>
#include <string>
#include <set>
#include "SplitTool.hh"
#include "SplitToolCppJieba.hh"

using namespace std;

class Dictproducer
{
public:
    Dictproducer(SplitTool* SplitTool = new SplitToolCppJieba()); // 用于处理中文

    // mode：1->增加英文；2->增加中文
    void addFile(const string& fileOrDir,int mode = 2);
    void buildEnDict();
    void buildCnDict();

    void storeDict(const char* filpath); // 将词典写入文件
    void storeIndex(const char *filpath);

    void showFiles() const; // 查看文件路径，作为测试用的
    void showDict() const; // 查看词典，作为测试用

    void pushDict(const string& word); // 存储某个单词

    void createIndex(); // 创建索引

    ~Dictproducer();
private:
    vector<string> _engFiles; // 存储英文语料库文件的绝对路径
    vector<string> _CNFiles; // 存储中文语料库文件的绝对路径

    /* key:word value:词频 */
    vector<pair<string,int>> _dict; // 词典
    SplitTool* _splitTool;
    map<string,set<int>> _index; // 词典索引
};

#endif